package Day_0209.NetWork;

/**
 * @author zxc
 * @date 2023/02/09 21:47
 **/
public class TCP_Connection_Build {
    public static void main(String[] args) {
        /**
         * TCP连接建立过程（三次握手）
         * ===》
         * 客户端和服务端建立TCP连接需要经过三次握手;
         * （1）首先，服务端处于监听状态，等待客户端发起连接请求
         * （2）客户端向服务端发起连接请求，选择序列号seq=x+1，客户端处于“同步已发送”状态;
         *  ===》
         *  此时，客户端可以确认的是，客户端可以发送消息;
         *  此时，服务端可以确认的是，null;
         *
         * （3）服务端接收到客户端的连接请求，发送确认请求给客户端，ack=x+1，即代表了客户端下一个发送的数据包序号从x+1开始;
         *  同时，选择序列号seq=y，服务端也处于“同步以发送”状态
         *  ===》
         *  此时，客户端可以确认的是，客户端可以发送消息;
         *  此时，服务端可以确认的是，客户端可以发送消息 && 服务端可以接受消息，可以发送消息;
         *
         * （4）客户端接收到服务端的确认请求，同时也向服务端发送确认请求，ack=y+1，即代表了服务端下一个发送的数据包序号从y+1开始;
         *  同时，客户端处于“已建立连接”状态;
         *  ===>
         *  此时，客户端可以确认的是，客户端可以接受并发送消息 && 服务端可以接受并发送消息发送消息;
         *  此时，服务端可以确认的是，客户端可以发送消息 && 服务端可以接受消息，可以发送消息;
         *
         * （5）服务端接受到客户端的确认请求，服务端进入到“已建立连接”状态;
         *  ===>
         *  此时，客户端可以确认的是，客户端可以接受并发送消息 && 服务端可以接受并发送消息发送消息;
         *  此时，服务端可以确认的是，客户端可以发送并接受消息 && 服务端可以接受消息，可以发送消息;
         *
         *  ===》 综上所述，完成一次TCP连接的建立，必然需要三次握手;
         *
         */
    }
}
